1 minute read

백준 10808번: 알파벳 개수

문제:

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.

입력:

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

풀이:

  • 이 문제를 풀기 위해서는 ASCII 코드라는 개념을 알아야 한다. ASCII 코드란 우리가 컴퓨터로 쓰는 각종 문자(’a’, ‘[’, ‘&’….)는 정해진 숫자 코드가 있다. 예를 들면 ‘a’는 97이다. 따라서 a에 1을 더하면 b가 된다. 아래는 각 문자를 숫자로 표현한 ASCII 표이다.

출처: [https://www.w3resource.com/cpp-exercises/for-loop/cpp-for-loop-exercise-61.php](https://www.w3resource.com/cpp-exercises/for-loop/cpp-for-loop-exercise-61.php)

출처: https://www.w3resource.com/cpp-exercises/for-loop/cpp-for-loop-exercise-61.php

  • 그래서 이 문제는 알파벳의 개수를 세어주는 문제인데 알파벳 순서대로 인덱스가 되어있다. 따라서 우리는 a, b, c, d….를 0, 1, 2, 3 ….로 만들어주어야 한다. 그러면 여기서 사용할 수 있는 방식은 주어진 알파벳에서 ‘a’의 ASCII 코드를 빼주면 된다.
  • 굳이 ASCII 코드를 외울 필요는 없고 문자열끼리 서로 뺄셈 연산을 해주면 알아서 값이 나온다. 따라서 정답을 저장하는 배열에 문자 - ’a’의 인덱스를 +1 해주면 된다.

⚠️배열을 선언 할 때 = {}를 해주어야 되는 이유는 그냥 선언을 하고 아무 값도 안주어지면 0이 아닐 수도 있기 때문에 저렇게 선언함으로서 모든 값을 0으로 초기화를 해줄 수 있다. 참고로 = {0}은 제일 첫번째 인덱스의 값만 0이 되므로 ={}를 사용하자.

코드:

#include <iostream>

using namespace std;

int main(){
	string s;
	int alphabet[26] = {};
	//입력 
	getline(cin, s); 
	//알파벳에 맞는 인덱스에 개수 +1 
	for(int i = 0; i < s.size(); i++){
		alphabet[s[i]-'a']++;
	}
	//출력 
	for(int i = 0; i < 26; i++){
		cout << alphabet[i] << " ";
	}
}

Leave a comment